Exposing Lift Components via Hessian/Burlap with Resin Container
Right, as you know, I use the lift framework a lot these days. I also use Resin as my choice container. So, i recently got to thinking, wouldn’t it be cool if i could just bosh together a simple way to expose controllers in lift via the groovy protocols made available by Resin - well, I have here an example of just such a thing.
Lift Side
Ok, before anyone has a poke at this code… it was a very quick and dirty example, so its not ideal, and obviously your code would be a whole lot more complex, but this article is just about proving concept.
I set up the object that I want to expose via remoting. Critically, there would be nothing stopping me using the persistance built into lift, or anything else available to java or scala for that matter. The key is the traits… as they are like java interfaces (broadly speaking), they let resin know what methods it can call.
package com.timperrett.resin.example.controller
trait HelloTrait {
def hello: String
}
class HelloWorld extends Object with HelloTrait {
def hello = "Hello from lift"
}
Resin Configuration
Next, we add a bit of config to resin so that it knows how/where to expose the service. Critically, we could have used Hessian, Burlap or CXF (for SOAP) and all by being pushed out of the container with zero extra effort.
<web-app root-directory="webapps/lift-remoting-example" id="/lift-remoting-example">
<servlet-mapping url-pattern="/api/hello-world" servlet-class="com.timperrett.resin.example.controller.HelloWorld">
<protocol uri="hessian:"></protocol>
</servlet-mapping>
</web-app>
Client Side (in another language!)
To proove the point, I thought I would just make a simple client in another language (namely ruby):
require 'rubygems'
require 'hessian'
url = http://127.0.0.1:8080/lift-remoting-example/api/hello-world
client = Hessian::HessianClient.new(url)
puts client.hello
Again, a very simple example, but one that proves the point. You should then see “Hello from lift” output in the terminal window.
Project Files
You can download my example from here
If you found this article interesting, or have played with this yourself also, then by all means leave a comment or get in touch.